package cn.dwy2002.task.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dwy2002.common.Result;
import com.dwy2002.pojo.dto.task.TaskDTO;
import com.dwy2002.pojo.dto.task.TaskPageDTO;
import com.dwy2002.pojo.dto.task.UpdateProgressDTO;
import com.dwy2002.pojo.po.task.Task;
import com.dwy2002.pojo.vo.task.TaskVO;

import java.util.List;

/**
 * @author 杜伟毅
 * @version 1.0
 * @since 2025/07/14
 */
public interface ITaskService extends IService<Task> {

    /**
     * 查询任务分页信息
     * <p>
     * 查询：可按任务标题、描述搜索
     * <p>
     * 排序：可按创建时间、更新时间、截止时间进行排序
     * <p>
     * 分类：可按任务优先级、任务状态进行分类
     *
     * @param dto 任务分页查询DTO
     * @return 分页结果
     * @author 杜伟毅
     * @since 2025/7/14 0014 15:35
     */
    Result<IPage<TaskVO>> getTaskPage(TaskPageDTO dto);

    /**
     * 创建任务
     *
     * @param dto 任务数据传输对象
     * @return 操作结果
     * @author 杜伟毅
     * @since 2025/7/14 0014 15:35
     */
    Result<Void> createTask(TaskDTO dto);

    /**
     * 批量删除任务（逻辑删除）
     *
     * @param ids 任务ID列表
     * @return 操作结果
     * @author 杜伟毅
     * @since 2025/7/14 0014 15:35
     */
    Result<Void> deleteTasks(List<String> ids);

    /**
     * 更新任务信息
     *
     * @param dto 任务数据DTO
     * @return 操作结果
     * @author 杜伟毅
     * @since 2025/7/14 0014 15:35
     */
    Result<Void> updateTask(TaskDTO dto);

    /**
     * 获取任务详情
     *
     * @param id 任务ID
     * @return 任务详情视图对象
     * @author 杜伟毅
     * @since 2025/7/14 0014 15:35
     */
    Result<TaskVO> getTaskDetail(String id);

    /**
     * 分配任务给责任人
     *
     * @param assignTaskDTO 任务分配信息
     * @return 操作结果
     * @author 杜伟毅
     * @since 2025/7/14 0014 15:35
     */
//    Result<Void> assignTask(AssignTaskDTO assignTaskDTO);

    /**
     * 更新任务进度状态
     *
     * @param dto 任务进度更新信息
     * @return 操作结果
     * @author 杜伟毅
     * @since 2025/7/14 0014 15:35
     */
    Result<Void> updateTaskProgress(UpdateProgressDTO dto);

    /**
     * 返回员工的任务(员工自己查)
     *
     * @author 杜伟毅
     * @since 2025/7/21 0021 8:58
     */
    Result<List<TaskVO>> findTasksByEmployee();

    /**
     * 返回员工的任务(店长查员工)
     *
     * @param userId 用户id
     * @author 杜伟毅
     * @since 2025/7/21 0021 8:58
     */
    Result<List<TaskVO>> findTasksByEmployee(String userId);

    /**
     * 管理员手动触发提醒任务
     *
     * @param
     * @return 对函数返回值的描述
     * @author 杜伟毅
     * @since 2025/7/18 0018 9:34
     */
//    Result<Void> checkAndNotifyUpcomingTasks();

    /**
     * 系统自动触发提醒任务
     *
     * @param
     * @return 对函数返回值的描述
     * @author 杜伟毅
     * @since 2025/7/18 0018 9:34
     */
//    Result<Void> autoCheckAndNotifyUpcomingTasks();
}